Comparison of Prolog implementations
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
top
The following Comparison of Prolog implementations provides a reference for the relative feature sets and performance of different implementations of the Prolog computer programming language. A comprehensive discussion of the most significant Prolog systems is presented in an article published in the 50-years of Prolog anniversary issue of the journal Theory and Practice of Logic Programming (TPLP).cite-ref-prolog50-1-0[1]
Contents
β’ Portability
β’ Main features
β’ Static analysis
β’ Optimizations
β’ Release
β’ Benchmarks
β’ Notes
β’ References
β’ External links
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Portability
There are Prolog implementations that are radically different, with different syntax and different semantics (e.g. Visual Prolog)cite-ref-portability2011-2-0[2] and sub-communities have developed around different implementations.cite-ref-portability2011-2-1[2]
Factors that can adversely affect portability include: use of bounded vs. unbounded integer arithmetic, additional types such as string objects, advanced numeric types (rationals, complex), feature extensions such as Unicode, threads, and tabling.cite-ref-3[3] Use of libraries unavailable in other implementations and library organisation:cite-ref-portability2011-2-3[2]
Currently, the way predicates are spread over the libraries and system built-ins differs enormously. [...] Fortunately, there are only few cases where we find predicates with the same name but different semantics (e.g. delete/3)
Main features
| Platform | |
|---|---|
| Name | OS |
| AllegroProlog | Unix , Windows , Mac OS X |
| BProlog | Unix , Windows , Mac OS X |
| Ciao | Unix , Windows , Mac OS X |
| DOS-Prolog | MS-DOS |
| ECLiPSe | Linux , Windows , Solaris , macOS |
| GNU Prolog | Unix , Windows , Mac OS X |
| JIProlog | JVM , Android |
| JLog | JVM |
| JScriptLog | Web Browser |
| jTrolog | JVM |
| WIN-Prolog | Windows |
| Open Prolog | Mac OS System 7 |
| Poplog Prolog | Linux (32- and 64-bit), Unix , Windows |
| Scryer Prolog | Linux , Windows , macOS |
| SICStus Prolog | Unix , Linux , Windows , macOS |
| Strawberry Prolog | Unix , Windows |
| SWI-Prolog | Unix , Linux , Windows , macOS |
| tuProlog | JVM , Android |
| Visual Prolog | Windows |
| XSB Prolog | Linux , Windows , Solaris , macOS |
| YAP-Prolog | Linux , Windows , Solaris , Mac OS X ,β¦ |
| Platform | | Features |
|---|---|---|
| Name | Licence | Native Graphics |
| AllegroProlog | Proprietary (limited free edition avail⦠| |
| BProlog | Proprietary (free for non-commercial us⦠| |
| Ciao | GPL , LGPL | |
| DOS-Prolog | Proprietary | Yes |
| ECLiPSe | MPL | |
| GNU Prolog | GPL , LGPL | |
| JIProlog | AGPL (commercial support available) | Yes |
| JLog | GPL | Yes |
| JScriptLog | GPL | |
| jTrolog | LGPL | |
| WIN-Prolog | Proprietary | Yes |
| Open Prolog | Freeware | |
| Poplog Prolog | Free Open Source | Only through POP-11 , on Linux |
| Scryer Prolog | BSD License | |
| SICStus Prolog | Proprietary | Yes |
| Strawberry Prolog | Freeware | Yes |
| SWI-Prolog | BSD License | Yes |
| tuProlog | LGPL | Yes |
| Visual Prolog | Freeware | Yes |
| XSB Prolog | LGPL | |
| YAP-Prolog | GPL or Artistic (user choice) | |
| Platform | | | | |
|---|---|---|---|---|
| Name | Compiled Code | Unicode | Object Oriented | Native OS Control |
| AllegroProlog | Yes | Yes | Yes | Yes, via Lisp |
| BProlog | Yes | Yes | Yes | Yes |
| Ciao | Yes | | Yes | Yes |
| DOS-Prolog | Yes | Yes | | Yes |
| ECLiPSe | Yes | | | Yes |
| GNU Prolog | Yes | | | Yes |
| JIProlog | | Yes | | Yes via Java |
| JLog | Yes | | | |
| jTrolog | | Yes | | |
| WIN-Prolog | Yes | Yes | Yes | Yes |
| Poplog Prolog | Yes | | | Yes |
| Scryer Prolog | | Yes | | |
| SICStus Prolog | Yes | Yes | Yes | Yes |
| Strawberry Prolog | Yes | Yes | | |
| SWI-Prolog | Yes | Yes | | Yes |
| tuProlog | | Yes | | |
| Visual Prolog | Yes | Yes | Yes | Yes |
| XSB Prolog | Yes | Yes | | Yes |
| YAP-Prolog | Yes | Yes | | Yes |
| Platform | | | |
|---|---|---|---|
| Name | Stand Alone Executable | C Interface | Java Interface |
| AllegroProlog | Yes | Yes, via Lisp | Yes, via Lisp |
| BProlog | Yes | Yes | Yes |
| Ciao | Yes | Yes | Yes |
| DOS-Prolog | Yes | | |
| ECLiPSe | | Yes | Yes |
| GNU Prolog | Yes | Yes | |
| JIProlog | Yes | Yes via Java | Yes |
| JLog | | | Yes |
| jTrolog | | | Yes |
| WIN-Prolog | Yes | Yes | Yes |
| Poplog Prolog | Yes | Yes | |
| SICStus Prolog | Yes | Yes | Yes |
| Strawberry Prolog | Yes | | |
| SWI-Prolog | Yes | Yes | Yes |
| tuProlog | | Yes | Yes |
| Visual Prolog | Yes | Yes | |
| XSB Prolog | Yes | Yes | Yes |
| YAP-Prolog | Yes | Yes | Yes |
| Platform | Toolkit | | |
|---|---|---|---|
| Name | Interactive Interpreter | Debugger | Code Profiler |
| AllegroProlog | Yes | Yes | Yes, via Lisp |
| BProlog | Yes | Yes | Yes |
| Ciao | Yes | Yes | Yes |
| DOS-Prolog | | Yes | |
| ECLiPSe | Yes | Yes | Yes |
| GNU Prolog | Yes | Yes | |
| JIProlog | Yes | Yes | |
| JLog | Yes | | |
| JScriptLog | Yes | | |
| jTrolog | Yes | Yes | |
| WIN-Prolog | Yes | Yes | Yes |
| Open Prolog | | Yes | |
| Poplog Prolog | Yes | Yes | |
| Scryer Prolog | Yes | | |
| SICStus Prolog | Yes | Yes | Yes |
| Strawberry Prolog | | Yes | |
| SWI-Prolog | Yes | Yes | Yes |
| tuProlog | Yes | Yes | |
| Visual Prolog | | Yes | Yes |
| XSB Prolog | Yes | Yes | Yes |
| YAP-Prolog | Yes | Yes | |
| Platform | Prolog Mechanics |
|---|---|
| Name | Syntax |
| AllegroProlog | S-expressions. Full Common Lisp integra⦠|
| BProlog | ISO-Prolog, plus event-handling, CLP(FD⦠|
| Ciao | ISO-Prolog, plus extensions |
| DOS-Prolog | Edinburgh Prolog |
| ECLiPSe | Extended Prolog, Multi-dialect, includi⦠|
| GNU Prolog | ISO-Prolog |
| JIProlog | ISO-Prolog |
| JLog | ISO-Prolog |
| JScriptLog | ISO-Prolog |
| jTrolog | ISO-Prolog |
| WIN-Prolog | Edinburgh Prolog with extensions |
| Poplog Prolog | Edinburgh Prolog, with interfaces to Po⦠|
| Scryer Prolog | ISO-Prolog |
| SICStus Prolog | ISO-Prolog |
| Strawberry Prolog | Not ISO-Prolog + extensions |
| SWI-Prolog | ISO-Prolog, Edinburgh Prolog |
| tuProlog | ISO-Prolog |
| XSB Prolog | ISO-Prolog, tabled WFS |
| YAP-Prolog | ISO-Prolog, Edinburgh Prolog, Quintus a⦠|
Operating system and web-related features
| | OS-related | | | | Web-related |
|---|---|---|---|---|---|
| Name | Conditional compilation | Sockets | Multi-threading | Tabling | HTTP client |
| BProlog | | | | Yes | |
| Ciao | Yes | Yes | Yes | Yes | Yes |
| ECLiPSe | Yes | Yes | Yes | | Yes |
| GNU Prolog | | Yes | | | |
| WIN-Prolog | | Yes | | | Yes |
| Scryer Prolog | | Yes | | Yes | Yes |
| SICStus Prolog | Yes | Yes | Yes | | |
| SWI-Prolog | Yes | Yes | Yes | Yes | Yes |
| Visual Prolog | Yes | Yes | Yes | | Yes |
| XSB | Yes | Yes | Yes | Yes | Yes |
| YAP-Prolog | Yes | Yes | Yes | Yes | |
| | | | |
|---|---|---|---|
| Name | HTTP server | HTML Parser | RDF Triple store |
| Ciao | Yes | Yes | |
| ECLiPSe | | Yes | |
| WIN-Prolog | Yes | Yes | |
| Scryer Prolog | Yes | Yes | |
| SWI-Prolog | Yes | Yes | Yes |
| Visual Prolog | Yes | Yes | |
Static analysis
| Name | Type checker | Determinacy checker | Call-pattern checker |
|---|---|---|---|
| Ciao | Yes | Yes | Yes |
| GNU Prolog | | | |
| SICStus Prolog | | Yes | |
| SWI-Prolog | | Yes | |
| Visual Prolog | Yes | Yes | Yes |
| XSB | | | |
| YAP-Prolog | | | |
Optimizations
| Name | Tail-Call Optimization | Choice Point Elimination | Environment Trimming |
|---|---|---|---|
| Ciao | Yes | Yes | Yes |
| ECLiPSe | Yes | Yes | Yes |
| GNU Prolog | Yes | Yes | Yes |
| SICStus Prolog | Yes | Yes | Yes |
| SWI-Prolog | Yes | Yes | Yes |
| Visual Prolog | Yes (compile time) | Yes (compile time) | N/A |
| XSB | Yes | Yes | Yes |
| YAP-Prolog | Yes | Yes | Yes |
| Name | Just-in-Time Indexing |
|---|---|
| Ciao | ? |
| ECLiPSe | multi-argument (compile time) |
| SWI-Prolog | Yes |
| Visual Prolog | N/A (compile time) |
| XSB | ? |
| YAP-Prolog | Yes |
Release
| Name | Version | Date |
|---|---|---|
| AllegroProlog | 1.1.2 | 2018-12-12 |
| BProlog | 8.1 | 2014-02-23 |
| JIProlog | 4.1.7.1 | 2021-08-26 |
| Ciao | 1.22 | 2022-09-28 |
| DOS-Prolog | 8.0 | |
| ECLiPSe | 7.1 | 2023-01-01 |
| GNU Prolog | 1.5.0 | 2023-02-21 |
| JLog | 1.3.6 | 2007-09-13 |
| JScriptLog | 0.7.5 beta | 2007-09-10 |
| jTrolog | | |
| WIN-Prolog | 8.0 | 2022-07-14 |
| Open Prolog | | |
| Poplog Prolog | V16 | 2020-01-06 |
| Scryer Prolog | 0.9.3 | 2023-11-02 |
| SICStus Prolog | 4.9.0 | 2023-12-18 |
| Strawberry Prolog | 6.1 | 2023-08-23 |
| SWI-Prolog | 9.1.18 | 2023-11-01 |
| tuProlog | 2P-Kt 0.31.18 | 2023-10-24 |
| Visual Prolog | 10, Build 1000 | 2021-04-15 |
| XSB Prolog | 5.0 | 2022-05-15 |
| YAProlog | 7.1.0 | 2020-12-19 |
Benchmarks
β’ Benchmarking issues: Odd Prolog benchmarking, Performance differences.cite-ref-15[14]
β’ Benchmarking software: older, Dobry's Benchmarks, Aquarius benchmark suite, (Bothe, 1990),cite-ref-16[15] (Demoen et al. 2001), benchmark descriptions
β’ Benchmarking results: Survey of java prolog engines by Michael Zeising
β’ Benchmarking results: OpenRuleBench yearly open-source benchmark of rule engines
Notes
cite-note-c-41. C/Java interface can also be used for graphics and OS control.
References
cite-note-prolog50-11. β citerefphilipp-k-rnermichael-leuscheljo-o-barbosav-tor-santos-costa2022Philipp KΓΆrner; Michael Leuschel; JoΓ£o Barbosa; VΓtor Santos Costa; VerΓ³nica Dahl; Manuel V. Hermenegildo; Jose F. Morales; Jan Wielemaker; Daniel Diaz; Salvador Abreu; Giovanni Ciatto (November 2022), "Fifty Years of Prolog and Beyond", Theory and Practice of Logic Programming, 22 (6): 776β858, doi:10.1017/S1471068422000102, hdl:10174/33387
cite-note-portability2011-22. β citerefwielemakercosta2011Wielemaker, J.; Costa, V. T. S. (2011). "On the Portability of Prolog Applications". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 6539. pp. 69β83. CiteSeerX 10.1.1.1030.9396. doi:10.1007/978-3-642-18378-2_8. ISBN 978-3-642-18377-5.
cite-note-33. β Jan Wielemaker and VΔ±tor Santos Costa: Portability of Prolog programs: theory and case-studies. CICLOPS-WLPE Workshop 2010 Archived 2010-07-16 at the Wayback Machine.
cite-note-52. Allegro Prolog
cite-note-63. "DOS-Prolog 8.0". Logic Programming Associates. 5 November 2023.
cite-note-74. JIProlog
cite-note-jlog-homepage-85. "JLog Homepage". jlogic.sourceforge.net. Retrieved 2023-11-03.
cite-note-96. "Jtrolog β Java.net". 2012-11-13. Archived from the original on 2012-11-13. Retrieved 2023-11-03.
cite-note-107. "WIN-Prolog 8.0". Logic Programming Associates. 5 November 2023.
cite-note-118. Open Prolog Home Page
cite-note-129. Scryer Prolog
cite-note-1310. Strawberry Prolog
cite-note-1411. tuProlog
cite-note-1514. β B. Demoen, and P. Nguyen, About unnecessary performance differences between Prolog implementations, Proceedings of the Colloquium on Implementation of Constraint and Logic Programming Systems (CICLOPS 2001)
cite-note-1716. β A Summary of XSB Performance (1993)
cite-note-1817. β citerefdemoennguyenvandeginste2002Demoen, B.; Nguyen, P. L.; Vandeginste, R. (2002). "Copying Garbage Collection for the WAM: to Mark or Not to Mark?". Logic Programming. Lecture Notes in Computer Science. Vol. 2401. pp. 194β208. CiteSeerX 10.1.1.13.2586. doi:10.1007/3-540-45619-8_14. ISBN 978-3-540-43930-1.
External links
β’ Overview of Prolog Systems by Ulrich Neumerkel
β’ Conformity assessment I: Syntax